% Ejercicio "Funciones y expresiones"
\subsection*{\fbox{\theejercicio} - Funciones y expresiones}

Sea un subconjunto del lenguaje de programaci\'on C definido por las expresiones aritm\'eticas de suma y productos cuyos operandos pueden ser n\'umeros, variables o funciones de cero o m\'as argumentos. Por ejemplo, son expresiones v\'alidas en este lenguaje las siguientes:

\begin{verbatim}
3 * f(a,b,1) + 8
f(g(h())) + 1
f(1,g(a+b,h(3)))
\end{verbatim}

\begin{enumerate}[1)]
\item Definir un conjunto de tokens adecuados y hallar una gram\'atica que genere este lenguaje. Hallar las tablas de an\'alisis SLR(1) para la gram\'atica aplicando en caso necesario las reglas de asociatividad y prioridad de operaci\'on habituales en C para resolver las ambig\"uedades.
\end{enumerate}

Se define nuevamente un subconjunto del lenguaje C, similar al anterior pero incluyendo un operador de asignaci\'on. Por ejemplo, son expresiones v\'alidas en este lenguaje las siguientes:

\begin{verbatim}
3 * x=f(a=1,b,1) + 8
f(g(h())) + 1
k = f(1,g(x=y=a+b,h(z=3)))
\end{verbatim}

\begin{enumerate}[2)]
\item Modificar la gram\'atica anterior para aceptar este nuevo operador. Hallar las tablas de an\'alisis SLR(1) aplicando en caso necesario las reglas de asociatividad y prioridad de operaci\'on.
\end{enumerate}

NOTA:

La siguiente tabla muestra, de mayor a menor, la prioridad de operaci\'on y la asociatividad de los operadores:

\begin{center}
\begin{tabular}{|c|c|} \hline
OPERADOR & ASOCIATIVIDAD \\ \hline
*        & Izquierda     \\ \hline
+        & Izquierda     \\ \hline
=        & Derecha       \\ \hline
,        & Derecha       \\ \hline
\end{tabular}
\end{center}

% Solución del ejercicio
\subsubsection*{SOLUCI\'ON}
